package com.qf.osmcart.cart.service.impl;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qf.api.product.feign.ProductFeignService;
import com.qf.common.core.entity.cart.Cart;
import com.qf.common.core.entity.cart.CartItem;
import com.qf.common.core.entity.product.Product;
import com.qf.common.core.util.UserUtils;
import com.qf.osmcart.cart.mapper.CartItemMapper;
import com.qf.osmcart.cart.mapper.CartMapper;
import com.qf.osmcart.cart.param.CartParam;
import com.qf.osmcart.cart.service.CartService;
import com.qf.osmcart.cart.vo.CartVO;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * 天--道--酬--勤
 *
 * @author LiangGaoQiang
 * @ClassName CartServiceImpl
 * @Date: 2025/6/11 19:11
 * @Description: 描述
 */
@Service
public class CartServiceImpl implements CartService {


    @Resource
    private CartMapper cartMapper;


    @Resource
    private CartItemMapper cartItemMapper;


    @Resource
    private ProductFeignService productFeignService;

    /**
     * 获取购物车数量
     *
     * @return 购物车数量
     */
    @Override
    public Integer getCartLength() {
        // 查询 cart_total_quantity 字段的值
        Cart userCartInfo = cartMapper.selectOne(Wrappers.lambdaQuery(Cart.class)
                .eq(Cart::getUserId, UserUtils.getUid()));

        // 判空处理并返回
        return userCartInfo != null ? userCartInfo.getCartTotalQuantity() : 0;
    }


    /**
     * 获取购物车列表
     *
     * @param cartParam 购物车参数
     * @return 购物车列表
     */
    @Override
    public Page<CartVO> getCart(CartParam cartParam) {
        // 创建数组：存储购物车列表数据
        List<CartVO> cartItemVO = new ArrayList<>();

        // 第一步：查询用户的购物车id
        Integer cartId = cartMapper.selectOne(Wrappers.lambdaQuery(Cart.class)
                        .eq(Cart::getUserId, UserUtils.getUid()))
                .getCartId();

        // 判空处理
        if (cartId == null) {
            return null;
        }

        // 第二步：查询购物车商品列表
        List<CartItem> cartItemList = cartItemMapper.selectList(Wrappers.lambdaQuery(CartItem.class).eq(CartItem::getCartId, cartId));
        // 判空处理
        if (cartItemList == null || cartItemList.isEmpty()) {
            return null;
        }

        // 第三步：查询商品id的列表
        List<Integer> productIdList = cartItemList.stream()
                .map(CartItem::getProductId)
                .distinct()
                .collect(Collectors.toList());

        // 第四步：查询商品信息
        List<Product> productList = productFeignService.getProductInfo(productIdList);
        if (productList == null || productList.isEmpty()) {
            return null;
        }

        // 第五步：将商品信息映射成Map
        Map<Integer, Product> productMap = productList.stream()
                .collect(Collectors.toMap(Product::getProductId, Function.identity()));

        // 第六步：将购物车商品信息映射成购物车列表数据
        for (CartItem cartItem : cartItemList) {
            Product product = productMap.get(cartItem.getProductId());

            if (product == null) continue;
            CartVO vo = new CartVO();
            vo.setIschecked(cartItem.getChecked());
            vo.setProduct_amount(cartItem.getQuantity());
            vo.setSelectedProperties(cartItem.getSelectedProperties());
            vo.setImage(product.getProductBanner());
            vo.setTitle(product.getProductTitle());
            vo.setPrice(product.getProductPrice());
            vo.setCartId(cartItem.getCartId());
            vo.setProductId(product.getProductId());

            cartItemVO.add(vo);
        }

        // 第七步：分页处理
        Page<CartVO> page = new Page<>(cartParam.getPage(), cartParam.getPageSize());
        int start = (cartParam.getPage() - 1) * cartParam.getPageSize();
        int end = Math.min(start + cartParam.getPageSize(), cartItemVO.size());

        page.setRecords(cartItemVO.subList(start, end));
        page.setTotal(cartItemVO.size());

        return page;

    }


    /**
     * 修改购物车商品选中状态
     *
     * @param cartParam 购物车参数
     * @return 修改结果
     */
    @Override
    public Boolean pathCartChecked(CartParam cartParam) {
        // 查询当前购物车项
        CartItem item = cartItemMapper.selectOne(Wrappers.lambdaQuery(CartItem.class)
                .eq(CartItem::getCartId, cartParam.getCartId())
                .eq(CartItem::getProductId, cartParam.getProductId()));

        if (item == null) {
            return false;
        }

        // 取反选中状态
        Boolean currentChecked = item.getChecked();
        Boolean newChecked = !currentChecked;

        // 更新数据库
        int updateSuccess = cartItemMapper.update(Wrappers.lambdaUpdate(CartItem.class)
                .eq(CartItem::getCartId, cartParam.getCartId())
                .eq(CartItem::getProductId, cartParam.getProductId())
                .set(CartItem::getChecked, newChecked));

        return updateSuccess > 0;
    }


}
